/*
 * This file is part of mpv.
 *
 * mpv is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * mpv is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with mpv.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdlib.h>
#include <sys/time.h>

#include "frequencies.h"

/* --------------------------------------------------------------------- */

/* US broadcast */
static const struct CHANLIST ntsc_bcast[] = {
    { "2",       55250 },
    { "3",       61250 },
    { "4",       67250 },
    { "5",       77250 },
    { "6",       83250 },
    { "7",      175250 },
    { "8",      181250 },
    { "9",      187250 },
    { "10",     193250 },
    { "11",     199250 },
    { "12",     205250 },
    { "13",     211250 },
    { "14",     471250 },
    { "15",     477250 },
    { "16",     483250 },
    { "17",     489250 },
    { "18",     495250 },
    { "19",     501250 },
    { "20",     507250 },
    { "21",     513250 },
    { "22",     519250 },
    { "23",     525250 },
    { "24",     531250 },
    { "25",     537250 },
    { "26",     543250 },
    { "27",     549250 },
    { "28",     555250 },
    { "29",     561250 },
    { "30",     567250 },
    { "31",     573250 },
    { "32",     579250 },
    { "33",     585250 },
    { "34",     591250 },
    { "35",     597250 },
    { "36",     603250 },
    { "37",     609250 },
    { "38",     615250 },
    { "39",     621250 },
    { "40",     627250 },
    { "41",     633250 },
    { "42",     639250 },
    { "43",     645250 },
    { "44",     651250 },
    { "45",     657250 },
    { "46",     663250 },
    { "47",     669250 },
    { "48",     675250 },
    { "49",     681250 },
    { "50",     687250 },
    { "51",     693250 },
    { "52",     699250 },
    { "53",     705250 },
    { "54",     711250 },
    { "55",     717250 },
    { "56",     723250 },
    { "57",     729250 },
    { "58",     735250 },
    { "59",     741250 },
    { "60",     747250 },
    { "61",     753250 },
    { "62",     759250 },
    { "63",     765250 },
    { "64",     771250 },
    { "65",     777250 },
    { "66",     783250 },
    { "67",     789250 },
    { "68",     795250 },
    { "69",     801250 },

    { "70",     807250 },
    { "71",     813250 },
    { "72",     819250 },
    { "73",     825250 },
    { "74",     831250 },
    { "75",     837250 },
    { "76",     843250 },
    { "77",     849250 },
    { "78",     855250 },
    { "79",     861250 },
    { "80",     867250 },
    { "81",     873250 },
    { "82",     879250 },
    { "83",     885250 },
};

/* US cable */
static const struct CHANLIST ntsc_cable[] = {
    { "1",       73250 },
    { "2",       55250 },
    { "3",       61250 },
    { "4",       67250 },
    { "5",       77250 },
    { "6",       83250 },
    { "7",      175250 },
    { "8",      181250 },
    { "9",      187250 },
    { "10",     193250 },
    { "11",     199250 },
    { "12",     205250 },

    { "13",     211250 },
    { "14",     121250 },
    { "15",     127250 },
    { "16",     133250 },
    { "17",     139250 },
    { "18",     145250 },
    { "19",     151250 },
    { "20",     157250 },

    { "21",     163250 },
    { "22",     169250 },
    { "23",     217250 },
    { "24",     223250 },
    { "25",     229250 },
    { "26",     235250 },
    { "27",     241250 },
    { "28",     247250 },
    { "29",     253250 },
    { "30",     259250 },
    { "31",     265250 },
    { "32",     271250 },
    { "33",     277250 },
    { "34",     283250 },
    { "35",     289250 },
    { "36",     295250 },
    { "37",     301250 },
    { "38",     307250 },
    { "39",     313250 },
    { "40",     319250 },
    { "41",     325250 },
    { "42",     331250 },
    { "43",     337250 },
    { "44",     343250 },
    { "45",     349250 },
    { "46",     355250 },
    { "47",     361250 },
    { "48",     367250 },
    { "49",     373250 },
    { "50",     379250 },
    { "51",     385250 },
    { "52",     391250 },
    { "53",     397250 },
    { "54",     403250 },
    { "55",     409250 },
    { "56",     415250 },
    { "57",     421250 },
    { "58",     427250 },
    { "59",     433250 },
    { "60",     439250 },
    { "61",     445250 },
    { "62",     451250 },
    { "63",     457250 },
    { "64",     463250 },
    { "65",     469250 },
    { "66",     475250 },
    { "67",     481250 },
    { "68",     487250 },
    { "69",     493250 },

    { "70",     499250 },
    { "71",     505250 },
    { "72",     511250 },
    { "73",     517250 },
    { "74",     523250 },
    { "75",     529250 },
    { "76",     535250 },
    { "77",     541250 },
    { "78",     547250 },
    { "79",     553250 },
    { "80",     559250 },
    { "81",     565250 },
    { "82",     571250 },
    { "83",     577250 },
    { "84",     583250 },
    { "85",     589250 },
    { "86",     595250 },
    { "87",     601250 },
    { "88",     607250 },
    { "89",     613250 },
    { "90",     619250 },
    { "91",     625250 },
    { "92",     631250 },
    { "93",     637250 },
    { "94",     643250 },
    { "95",      91250 },
    { "96",      97250 },
    { "97",     103250 },
    { "98",     109250 },
    { "99",     115250 },
    { "100",    649250 },
    { "101",    655250 },
    { "102",    661250 },
    { "103",    667250 },
    { "104",    673250 },
    { "105",    679250 },
    { "106",    685250 },
    { "107",    691250 },
    { "108",    697250 },
    { "109",    703250 },
    { "110",    709250 },
    { "111",    715250 },
    { "112",    721250 },
    { "113",    727250 },
    { "114",    733250 },
    { "115",    739250 },
    { "116",    745250 },
    { "117",    751250 },
    { "118",    757250 },
    { "119",    763250 },
    { "120",    769250 },
    { "121",    775250 },
    { "122",    781250 },
    { "123",    787250 },
    { "124",    793250 },
    { "125",    799250 },

    { "T7",       8250 },
    { "T8",      14250 },
    { "T9",      20250 },
    { "T10",     26250 },
    { "T11",     32250 },
    { "T12",     38250 },
    { "T13",     44250 },
    { "T14",     50250 }
};

/* US HRC */
static const struct CHANLIST ntsc_hrc[] = {
    { "1",        72000 },
    { "2",        54000 },
    { "3",        60000 },
    { "4",        66000 },
    { "5",        78000 },
    { "6",        84000 },
    { "7",       174000 },
    { "8",       180000 },
    { "9",       186000 },
    { "10",      192000 },
    { "11",      198000 },
    { "12",      204000 },

    { "13",      210000 },
    { "14",      120000 },
    { "15",      126000 },
    { "16",      132000 },
    { "17",      138000 },
    { "18",      144000 },
    { "19",      150000 },
    { "20",      156000 },

    { "21",      162000 },
    { "22",      168000 },
    { "23",      216000 },
    { "24",      222000 },
    { "25",      228000 },
    { "26",      234000 },
    { "27",      240000 },
    { "28",      246000 },
    { "29",      252000 },
    { "30",      258000 },
    { "31",      264000 },
    { "32",      270000 },
    { "33",      276000 },
    { "34",      282000 },
    { "35",      288000 },
    { "36",      294000 },
    { "37",      300000 },
    { "38",      306000 },
    { "39",      312000 },
    { "40",      318000 },
    { "41",      324000 },
    { "42",      330000 },
    { "43",      336000 },
    { "44",      342000 },
    { "45",      348000 },
    { "46",      354000 },
    { "47",      360000 },
    { "48",      366000 },
    { "49",      372000 },
    { "50",      378000 },
    { "51",      384000 },
    { "52",      390000 },
    { "53",      396000 },
    { "54",      402000 },
    { "55",      408000 },
    { "56",      414000 },
    { "57",      420000 },
    { "58",      426000 },
    { "59",      432000 },
    { "60",      438000 },
    { "61",      444000 },
    { "62",      450000 },
    { "63",      456000 },
    { "64",      462000 },
    { "65",      468000 },
    { "66",      474000 },
    { "67",      480000 },
    { "68",      486000 },
    { "69",      492000 },

    { "70",      498000 },
    { "71",      504000 },
    { "72",      510000 },
    { "73",      516000 },
    { "74",      522000 },
    { "75",      528000 },
    { "76",      534000 },
    { "77",      540000 },
    { "78",      546000 },
    { "79",      552000 },
    { "80",      558000 },
    { "81",      564000 },
    { "82",      570000 },
    { "83",      576000 },
    { "84",      582000 },
    { "85",      588000 },
    { "86",      594000 },
    { "87",      600000 },
    { "88",      606000 },
    { "89",      612000 },
    { "90",      618000 },
    { "91",      624000 },
    { "92",      630000 },
    { "93",      636000 },
    { "94",      642000 },
    { "95",      900000 },
    { "96",      960000 },
    { "97",      102000 },
    { "98",      108000 },
    { "99",      114000 },
    { "100",     648000 },
    { "101",     654000 },
    { "102",     660000 },
    { "103",     666000 },
    { "104",     672000 },
    { "105",     678000 },
    { "106",     684000 },
    { "107",     690000 },
    { "108",     696000 },
    { "109",     702000 },
    { "110",     708000 },
    { "111",     714000 },
    { "112",     720000 },
    { "113",     726000 },
    { "114",     732000 },
    { "115",     738000 },
    { "116",     744000 },
    { "117",     750000 },
    { "118",     756000 },
    { "119",     762000 },
    { "120",     768000 },
    { "121",     774000 },
    { "122",     780000 },
    { "123",     786000 },
    { "124",     792000 },
    { "125",     798000 },

    { "T7",        7000 },
    { "T8",       13000 },
    { "T9",       19000 },
    { "T10",      25000 },
    { "T11",      31000 },
    { "T12",      37000 },
    { "T13",      43000 },
    { "T14",      49000 },
};

/* --------------------------------------------------------------------- */

/* JP broadcast */
static const struct CHANLIST ntsc_bcast_jp[] = {
    { "1",   91250 },
    { "2",   97250 },
    { "3",  103250 },
    { "4",  171250 },
    { "5",  177250 },
    { "6",  183250 },
    { "7",  189250 },
    { "8",  193250 },
    { "9",  199250 },
    { "10", 205250 },
    { "11", 211250 },
    { "12", 217250 },

    { "13", 471250 },
    { "14", 477250 },
    { "15", 483250 },
    { "16", 489250 },
    { "17", 495250 },
    { "18", 501250 },
    { "19", 507250 },
    { "20", 513250 },
    { "21", 519250 },
    { "22", 525250 },
    { "23", 531250 },
    { "24", 537250 },
    { "25", 543250 },
    { "26", 549250 },
    { "27", 555250 },
    { "28", 561250 },
    { "29", 567250 },
    { "30", 573250 },
    { "31", 579250 },
    { "32", 585250 },
    { "33", 591250 },
    { "34", 597250 },
    { "35", 603250 },
    { "36", 609250 },
    { "37", 615250 },
    { "38", 621250 },
    { "39", 627250 },
    { "40", 633250 },
    { "41", 639250 },
    { "42", 645250 },
    { "43", 651250 },
    { "44", 657250 },

    { "45", 663250 },
    { "46", 669250 },
    { "47", 675250 },
    { "48", 681250 },
    { "49", 687250 },
    { "50", 693250 },
    { "51", 699250 },
    { "52", 705250 },
    { "53", 711250 },
    { "54", 717250 },
    { "55", 723250 },
    { "56", 729250 },
    { "57", 735250 },
    { "58", 741250 },
    { "59", 747250 },
    { "60", 753250 },
    { "61", 759250 },
    { "62", 765250 },
};

/* JP cable */
static const struct CHANLIST ntsc_cable_jp[] = {
    { "13",     109250 },
    { "14",     115250 },
    { "15",     121250 },
    { "16",     127250 },
    { "17",     133250 },
    { "18",     139250 },
    { "19",     145250 },
    { "20",     151250 },

    { "21",     157250 },
    { "22",     165250 },
    { "23",     223250 },
    { "24",     231250 },
    { "25",     237250 },
    { "26",     243250 },
    { "27",     249250 },
    { "28",     253250 },
    { "29",     259250 },
    { "30",     265250 },
    { "31",     271250 },
    { "32",     277250 },
    { "33",     283250 },
    { "34",     289250 },
    { "35",     295250 },
    { "36",     301250 },
    { "37",     307250 },
    { "38",     313250 },
    { "39",     319250 },
    { "40",     325250 },
    { "41",     331250 },
    { "42",     337250 },
    { "43",     343250 },
    { "44",     349250 },
    { "45",     355250 },
    { "46",     361250 },
    { "47",     367250 },
    { "48",     373250 },
    { "49",     379250 },
    { "50",     385250 },
    { "51",     391250 },
    { "52",     397250 },
    { "53",     403250 },
    { "54",     409250 },
    { "55",     415250 },
    { "56",     421250 },
    { "57",     427250 },
    { "58",     433250 },
    { "59",     439250 },
    { "60",     445250 },
    { "61",     451250 },
    { "62",     457250 },
    { "63",     463250 },
};

/* --------------------------------------------------------------------- */

/* australia */
static const struct CHANLIST pal_australia[] = {
    { "0",       46250 },
    { "1",       57250 },
    { "2",       64250 },
    { "3",       86250 },
    { "4",       95250 },
    { "5",      102250 },
    { "5A",     138250 },
    { "6",      175250 },
    { "7",      182250 },
    { "8",      189250 },
    { "9",      196250 },
    { "10",     209250 },
    { "11",     216250 },
    { "28",     527250 },
    { "29",     534250 },
    { "30",     541250 },
    { "31",     548250 },
    { "32",     555250 },
    { "33",     562250 },
    { "34",     569250 },
    { "35",     576250 },
    { "36",     591250 },
    { "39",     604250 },
    { "40",     611250 },
    { "41",     618250 },
    { "42",     625250 },
    { "43",     632250 },
    { "44",     639250 },
    { "45",     646250 },
    { "46",     653250 },
    { "47",     660250 },
    { "48",     667250 },
    { "49",     674250 },
    { "50",     681250 },
    { "51",     688250 },
    { "52",     695250 },
    { "53",     702250 },
    { "54",     709250 },
    { "55",     716250 },
    { "56",     723250 },
    { "57",     730250 },
    { "58",     737250 },
    { "59",     744250 },
    { "60",     751250 },
    { "61",     758250 },
    { "62",     765250 },
    { "63",     772250 },
    { "64",     779250 },
    { "65",     786250 },
    { "66",     793250 },
    { "67",     800250 },
    { "68",     807250 },
    { "69",     814250 },
};

/* --------------------------------------------------------------------- */
/* europe                                                                */

/* CCIR frequencies */

#define FREQ_CCIR_I_III         \
    { "E2",       48250 },      \
    { "E3",       55250 },      \
    { "E4",       62250 },      \
                                \
    { "S01",      69250 },      \
    { "S02",      76250 },      \
    { "S03",      83250 },      \
                                \
    { "E5",      175250 },      \
    { "E6",      182250 },      \
    { "E7",      189250 },      \
    { "E8",      196250 },      \
    { "E9",      203250 },      \
    { "E10",     210250 },      \
    { "E11",     217250 },      \
    { "E12",     224250 }

#define FREQ_CCIR_SL_SH         \
    { "SE1",     105250 },      \
    { "SE2",     112250 },      \
    { "SE3",     119250 },      \
    { "SE4",     126250 },      \
    { "SE5",     133250 },      \
    { "SE6",     140250 },      \
    { "SE7",     147250 },      \
    { "SE8",     154250 },      \
    { "SE9",     161250 },      \
    { "SE10",    168250 },      \
                                \
    { "SE11",    231250 },      \
    { "SE12",    238250 },      \
    { "SE13",    245250 },      \
    { "SE14",    252250 },      \
    { "SE15",    259250 },      \
    { "SE16",    266250 },      \
    { "SE17",    273250 },      \
    { "SE18",    280250 },      \
    { "SE19",    287250 },      \
    { "SE20",    294250 }

#define FREQ_CCIR_H     \
    { "S21", 303250 },  \
    { "S22", 311250 },  \
    { "S23", 319250 },  \
    { "S24", 327250 },  \
    { "S25", 335250 },  \
    { "S26", 343250 },  \
    { "S27", 351250 },  \
    { "S28", 359250 },  \
    { "S29", 367250 },  \
    { "S30", 375250 },  \
    { "S31", 383250 },  \
    { "S32", 391250 },  \
    { "S33", 399250 },  \
    { "S34", 407250 },  \
    { "S35", 415250 },  \
    { "S36", 423250 },  \
    { "S37", 431250 },  \
    { "S38", 439250 },  \
    { "S39", 447250 },  \
    { "S40", 455250 },  \
    { "S41", 463250 }

/* OIRT frequencies */

#define FREQ_OIRT_I_III         \
    { "R1",       49750 },      \
    { "R2",       59250 },      \
                                \
    { "R3",       77250 },      \
    { "R4",       85250 },      \
    { "R5",       93250 },      \
                                \
    { "R6",      175250 },      \
    { "R7",      183250 },      \
    { "R8",      191250 },      \
    { "R9",      199250 },      \
    { "R10",     207250 },      \
    { "R11",     215250 },      \
    { "R12",     223250 }

#define FREQ_OIRT_SL_SH         \
    { "SR1",     111250 },      \
    { "SR2",     119250 },      \
    { "SR3",     127250 },      \
    { "SR4",     135250 },      \
    { "SR5",     143250 },      \
    { "SR6",     151250 },      \
    { "SR7",     159250 },      \
    { "SR8",     167250 },      \
                                \
    { "SR11",    231250 },      \
    { "SR12",    239250 },      \
    { "SR13",    247250 },      \
    { "SR14",    255250 },      \
    { "SR15",    263250 },      \
    { "SR16",    271250 },      \
    { "SR17",    279250 },      \
    { "SR18",    287250 },      \
    { "SR19",    295250 }

#define FREQ_UHF        \
    { "21",  471250 },  \
    { "22",  479250 },  \
    { "23",  487250 },  \
    { "24",  495250 },  \
    { "25",  503250 },  \
    { "26",  511250 },  \
    { "27",  519250 },  \
    { "28",  527250 },  \
    { "29",  535250 },  \
    { "30",  543250 },  \
    { "31",  551250 },  \
    { "32",  559250 },  \
    { "33",  567250 },  \
    { "34",  575250 },  \
    { "35",  583250 },  \
    { "36",  591250 },  \
    { "37",  599250 },  \
    { "38",  607250 },  \
    { "39",  615250 },  \
    { "40",  623250 },  \
    { "41",  631250 },  \
    { "42",  639250 },  \
    { "43",  647250 },  \
    { "44",  655250 },  \
    { "45",  663250 },  \
    { "46",  671250 },  \
    { "47",  679250 },  \
    { "48",  687250 },  \
    { "49",  695250 },  \
    { "50",  703250 },  \
    { "51",  711250 },  \
    { "52",  719250 },  \
    { "53",  727250 },  \
    { "54",  735250 },  \
    { "55",  743250 },  \
    { "56",  751250 },  \
    { "57",  759250 },  \
    { "58",  767250 },  \
    { "59",  775250 },  \
    { "60",  783250 },  \
    { "61",  791250 },  \
    { "62",  799250 },  \
    { "63",  807250 },  \
    { "64",  815250 },  \
    { "65",  823250 },  \
    { "66",  831250 },  \
    { "67",  839250 },  \
    { "68",  847250 },  \
    { "69",  855250 }

static const struct CHANLIST europe_west[] = {
    FREQ_CCIR_I_III,
    FREQ_CCIR_SL_SH,
    FREQ_CCIR_H,
    FREQ_UHF
};

static const struct CHANLIST europe_east[] = {
    FREQ_OIRT_I_III,
    FREQ_OIRT_SL_SH,
    FREQ_CCIR_I_III,
    FREQ_CCIR_SL_SH,
    FREQ_CCIR_H,
    FREQ_UHF
};

static const struct CHANLIST pal_italy[] = {
    { "A",       53750 },
    { "B",       62250 },
    { "C",       82250 },
    { "D",      175250 },
    { "E",      183750 },
    { "F",      192250 },
    { "G",      201250 },
    { "H",      210250 },
    { "H1",     217250 },
    { "H2",     224250 },
    FREQ_UHF
};

static const struct CHANLIST pal_ireland[] = {
    { "A0",     45750 },
    { "A1",     48000 },
    { "A2",     53750 },
    { "A3",     56000 },
    { "A4",     61750 },
    { "A5",     64000 },
    { "A6",    175250 },
    { "A7",    176000 },
    { "A8",    183250 },
    { "A9",    184000 },
    { "A10",   191250 },
    { "A11",   192000 },
    { "A12",   199250 },
    { "A13",   200000 },
    { "A14",   207250 },
    { "A15",   208000 },
    { "A16",   215250 },
    { "A17",   216000 },
    { "A18",   224000 },
    { "A19",   232000 },
    { "A20",   248000 },
    { "A21",   256000 },
    { "A22",   264000 },
    { "A23",   272000 },
    { "A24",   280000 },
    { "A25",   288000 },
    { "A26",   296000 },
    { "A27",   304000 },
    { "A28",   312000 },
    { "A29",   320000 },
    { "A30",   344000 },
    { "A31",   352000 },
    { "A32",   408000 },
    { "A33",   416000 },
    { "A34",   448000 },
    { "A35",   480000 },
    { "A36",   520000 },
    FREQ_UHF,
};

static const struct CHANLIST secam_france[] = {
    { "K01",    47750 },
    { "K02",    55750 },
    { "K03",    60500 },
    { "K04",    63750 },
    { "K05",   176000 },
    { "K06",   184000 },
    { "K07",   192000 },
    { "K08",   200000 },
    { "K09",   208000 },
    { "K10",   216000 },
    { "KB",    116750 },
    { "KC",    128750 },
    { "KD",    140750 },
    { "KE",    159750 },
    { "KF",    164750 },
    { "KG",    176750 },
    { "KH",    188750 },
    { "KI",    200750 },
    { "KJ",    212750 },
    { "KK",    224750 },
    { "KL",    236750 },
    { "KM",    248750 },
    { "KN",    260750 },
    { "KO",    272750 },
    { "KP",    284750 },
    { "KQ",    296750 },
    { "H01",   303250 },
    { "H02",   311250 },
    { "H03",   319250 },
    { "H04",   327250 },
    { "H05",   335250 },
    { "H06",   343250 },
    { "H07",   351250 },
    { "H08",   359250 },
    { "H09",   367250 },
    { "H10",   375250 },
    { "H11",   383250 },
    { "H12",   391250 },
    { "H13",   399250 },
    { "H14",   407250 },
    { "H15",   415250 },
    { "H16",   423250 },
    { "H17",   431250 },
    { "H18",   439250 },
    { "H19",   447250 },
    FREQ_UHF,
};

/* --------------------------------------------------------------------- */

static const struct CHANLIST pal_newzealand[] = {
    { "1",        45250 },
    { "2",        55250 },
    { "3",        62250 },
    { "4",       175250 },
    { "5",       182250 },
    { "6",       189250 },
    { "7",       196250 },
    { "8",       203250 },
    { "9",       210250 },
    { "10",      217250 },
    { "11",      224250 },
    FREQ_UHF,
};

/* --------------------------------------------------------------------- */

/* China broadcast */
static const struct CHANLIST pal_bcast_cn[] = {
    { "1",      49750 },
    { "2",      57750 },
    { "3",      65750 },
    { "4",      77250 },
    { "5",      85250 },
    { "6",      112250 },
    { "7",      120250 },
    { "8",      128250 },
    { "9",      136250 },
    { "10",     144250 },
    { "11",     152250 },
    { "12",     160250 },
    { "13",     168250 },
    { "14",     176250 },
    { "15",     184250 },
    { "16",     192250 },
    { "17",     200250 },
    { "18",     208250 },
    { "19",     216250 },
    { "20",     224250 },
    { "21",     232250 },
    { "22",     240250 },
    { "23",     248250 },
    { "24",     256250 },
    { "25",     264250 },
    { "26",     272250 },
    { "27",     280250 },
    { "28",     288250 },
    { "29",     296250 },
    { "30",     304250 },
    { "31",     312250 },
    { "32",     320250 },
    { "33",     328250 },
    { "34",     336250 },
    { "35",     344250 },
    { "36",     352250 },
    { "37",     360250 },
    { "38",     368250 },
    { "39",     376250 },
    { "40",     384250 },
    { "41",     392250 },
    { "42",     400250 },
    { "43",     408250 },
    { "44",     416250 },
    { "45",     424250 },
    { "46",     432250 },
    { "47",     440250 },
    { "48",     448250 },
    { "49",     456250 },
    { "50",     463250 },
    { "51",     471250 },
    { "52",     479250 },
    { "53",     487250 },
    { "54",     495250 },
    { "55",     503250 },
    { "56",     511250 },
    { "57",     519250 },
    { "58",     527250 },
    { "59",     535250 },
    { "60",     543250 },
    { "61",     551250 },
    { "62",     559250 },
    { "63",     607250 },
    { "64",     615250 },
    { "65",     623250 },
    { "66",     631250 },
    { "67",     639250 },
    { "68",     647250 },
    { "69",     655250 },
    { "70",     663250 },
    { "71",     671250 },
    { "72",     679250 },
    { "73",     687250 },
    { "74",     695250 },
    { "75",     703250 },
    { "76",     711250 },
    { "77",     719250 },
    { "78",     727250 },
    { "79",     735250 },
    { "80",     743250 },
    { "81",     751250 },
    { "82",     759250 },
    { "83",     767250 },
    { "84",     775250 },
    { "85",     783250 },
    { "86",     791250 },
    { "87",     799250 },
    { "88",     807250 },
    { "89",     815250 },
    { "90",     823250 },
    { "91",     831250 },
    { "92",     839250 },
    { "93",     847250 },
    { "94",     855250 },
};

/* --------------------------------------------------------------------- */
/* South Africa Broadcast */

static const struct CHANLIST pal_bcast_za[] ={
    { "1", 175250 },
    { "2", 183250 },
    { "3", 191250 },
    { "4", 199250 },
    { "5", 207250 },
    { "6", 215250 },
    { "7", 223250 },
    { "8", 231250 },
    FREQ_UHF
};

/* --------------------------------------------------------------------- */

static const struct CHANLIST argentina[] = {
    { "001",   56250 },
    { "002",   62250 },
    { "003",   68250 },
    { "004",   78250 },
    { "005",   84250 },
    { "006",  176250 },
    { "007",  182250 },
    { "008",  188250 },
    { "009",  194250 },
    { "010",  200250 },
    { "011",  206250 },
    { "012",  212250 },
    { "013",  122250 },
    { "014",  128250 },
    { "015",  134250 },
    { "016",  140250 },
    { "017",  146250 },
    { "018",  152250 },
    { "019",  158250 },
    { "020",  164250 },
    { "021",  170250 },
    { "022",  218250 },
    { "023",  224250 },
    { "024",  230250 },
    { "025",  236250 },
    { "026",  242250 },
    { "027",  248250 },
    { "028",  254250 },
    { "029",  260250 },
    { "030",  266250 },
    { "031",  272250 },
    { "032",  278250 },
    { "033",  284250 },
    { "034",  290250 },
    { "035",  296250 },
    { "036",  302250 },
    { "037",  308250 },
    { "038",  314250 },
    { "039",  320250 },
    { "040",  326250 },
    { "041",  332250 },
    { "042",  338250 },
    { "043",  344250 },
    { "044",  350250 },
    { "045",  356250 },
    { "046",  362250 },
    { "047",  368250 },
    { "048",  374250 },
    { "049",  380250 },
    { "050",  386250 },
    { "051",  392250 },
    { "052",  398250 },
    { "053",  404250 },
    { "054",  410250 },
    { "055",  416250 },
    { "056",  422250 },
    { "057",  428250 },
    { "058",  434250 },
    { "059",  440250 },
    { "060",  446250 },
    { "061",  452250 },
    { "062",  458250 },
    { "063",  464250 },
    { "064",  470250 },
    { "065",  476250 },
    { "066",  482250 },
    { "067",  488250 },
    { "068",  494250 },
    { "069",  500250 },
    { "070",  506250 },
    { "071",  512250 },
    { "072",  518250 },
    { "073",  524250 },
    { "074",  530250 },
    { "075",  536250 },
    { "076",  542250 },
    { "077",  548250 },
    { "078",  554250 },
    { "079",  560250 },
    { "080",  566250 },
    { "081",  572250 },
    { "082",  578250 },
    { "083",  584250 },
    { "084",  590250 },
    { "085",  596250 },
    { "086",  602250 },
    { "087",  608250 },
    { "088",  614250 },
    { "089",  620250 },
    { "090",  626250 },
    { "091",  632250 },
    { "092",  638250 },
    { "093",  644250 },
};

/* --------------------------------------------------------------------- */

static const struct CHANLIST russia[] = {
    {"1",     49750 },
    {"2",     59250 },
    {"3",     77250 },
    {"4",     85250 },
    {"5",     93250 },
    {"SK1",   111250 },
    {"SK2",   119250 },
    {"SK3",   127250 },
    {"SK4",   135250 },
    {"SK5",   143250 },
    {"SK6",   151250 },
    {"SK7",   159250 },
    {"SK8",   167250 },
    {"6",     175250 },
    {"7",     183250 },
    {"8",     191250 },
    {"9",     199250 },
    {"10",    207250 },
    {"11",    215250 },
    {"12",    223250 },
    {"SK11",  231250 },
    {"SK12",  239250 },
    {"SK13",  247250 },
    {"SK14",  255250 },
    {"SK15",  263250 },
    {"SK16",  271250 },
    {"SK17",  279250 },
    {"SK18",  287250 },
    {"S19",   295250 },
    {"S20",   303250 },
    {"S21",   311250 },
    {"S22",   319250 },
    {"S23",   327250 },
    {"S24",   335250 },
    {"S25",   343250 },
    {"S26",   351250 },
    {"S27",   359250 },
    {"S28",   367250 },
    {"S29",   375250 },
    {"S30",   383250 },
    {"S31",   391250 },
    {"S32",   399250 },
    {"S33",   407250 },
    {"S34",   415250 },
    {"S35",   423250 },
    {"S36",   431250 },
    {"S37",   439250 },
    {"S38",   447250 },
    {"S39",   455250 },
    {"S40",   463250 },
    {"21",    471250 },
    {"22",    479250 },
    {"23",    487250 },
    {"24",    495250 },
    {"25",    503250 },
    {"26",    511250 },
    {"27",    519250 },
    {"28",    527250 },
    {"29",    535250 },
    {"30",    543250 },
    {"31",    551250 },
    {"32",    559250 },
    {"33",    567250 },
    {"34",    575250 },
    {"35",    583250 },
    {"36",    591250 },
    {"37",    599250 },
    {"38",    607250 },
    {"39",    615250 },
    {"40",    623250 },
    {"41",    631250 },
    {"42",    639250 },
    {"43",    647250 },
    {"44",    655250 },
    {"45",    663250 },
    {"46",    671250 },
    {"47",    679250 },
    {"48",    687250 },
    {"49",    695250 },
    {"50",    703250 },
    {"51",    711250 },
    {"52",    719250 },
    {"53",    727250 },
    {"54",    735250 },
    {"55",    743250 },
    {"56",    751250 },
    {"57",    759250 },
    {"58",    767250 },
    {"59",    775250 },
    {"60",    783250 },
    {"61",    791250 },
    {"62",    799250 },
    {"63",    807250 },
    {"64",    815250 },
    {"65",    523250 },
    {"66",    831250 },
    {"67",    839250 },
    {"68",    847250 },
    {"69",    855250 },
};
/* --------------------------------------------------------------------- */

const struct CHANLISTS chanlists[] = {
    { "us-bcast",         ntsc_bcast,        CHAN_COUNT(ntsc_bcast)        },
    { "us-cable",         ntsc_cable,        CHAN_COUNT(ntsc_cable)        },
    { "us-cable-hrc",     ntsc_hrc,          CHAN_COUNT(ntsc_hrc)          },
    { "japan-bcast",      ntsc_bcast_jp,     CHAN_COUNT(ntsc_bcast_jp)     },
    { "japan-cable",      ntsc_cable_jp,     CHAN_COUNT(ntsc_cable_jp)     },
    { "europe-west",      europe_west,       CHAN_COUNT(europe_west)       },
    { "europe-east",      europe_east,       CHAN_COUNT(europe_east)       },
    { "italy",            pal_italy,         CHAN_COUNT(pal_italy)         },
    { "newzealand",       pal_newzealand,    CHAN_COUNT(pal_newzealand)    },
    { "australia",        pal_australia,     CHAN_COUNT(pal_australia)     },
    { "ireland",          pal_ireland,       CHAN_COUNT(pal_ireland)       },
    { "france",           secam_france,      CHAN_COUNT(secam_france)      },
    { "china-bcast",      pal_bcast_cn,      CHAN_COUNT(pal_bcast_cn)      },
    { "southafrica",      pal_bcast_za,      CHAN_COUNT(pal_bcast_za)      },
    { "argentina",        argentina,         CHAN_COUNT(argentina)         },
    { "russia",           russia,            CHAN_COUNT(russia)            },
    { NULL, NULL, 0 } /* EOF */
};

const int                chancount = CHAN_COUNT(europe_west);
